# 求出年销售额前5的年份和销售额，并画出柱形图

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt


def topic_4(data: pd.DataFrame):
    # 设置绘图风格
    plt.style.use("ggplot")

    # 设置中文编码和符号的正常显示
    plt.rcParams['font.family'] = 'sans-serif'
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
    plt.rcParams["axes.unicode_minus"] = False

    # 去除重复数据
    data.drop_duplicates(inplace=True)

    # 按年份分组并计算每个年份的全球销售总额
    Yearly_sales = data.groupby(by=['Year'])['Global_Sales'].sum()
    Yearly_sales.sort_values(inplace=True, ascending=False)

    # 获取前5年份的数据
    top5_years = Yearly_sales.head(5)

    # 设置图框的大小
    fig, ax = plt.subplots(figsize=(12, 8))

    # 绘制柱状图
    ax.bar(x=[1, 2, 3, 4, 5], height=top5_years.values, width=0.4, label='销售额')

    # 添加数据标签
    for i, v in enumerate(top5_years.values):
        ax.text(i + 0.9, v, f'{v:.2f}', fontsize=12, color='black', va='bottom')

    # 添加标题和坐标轴标签
    plt.title('年销售额前5的年份和销售额', fontsize=16)
    plt.xlabel('年份', fontsize=14)
    plt.ylabel('全球销售总额 (百万美元)', fontsize=14)

    # 剔除图框上边界和右边界的刻度
    plt.tick_params(top=False, right=False)

    # 自定义x轴刻度和标签
    plt.xticks([1, 2, 3, 4, 5], [int(i) for i in top5_years.index], fontsize=12)


    # 添加数据标签
    for i, v in enumerate(top5_years.values):
        plt.text(top5_years.index[i], v, f'{v:.2f}', fontsize=12, color='red', va='bottom')

    # 显示图例
    ax.legend(loc='upper right', fontsize=12)

    # 为了避免x轴日期刻度标签的重叠，设置x轴刻度自动展现，并且45度倾斜
    fig.autofmt_xdate(rotation=45, ha='center')
    # 保存图像
    plt.savefig('./static/img/topic_4.png')
    # 显示图形
    plt.show()


